package cn.tedu._04mybatis.mapper;

import cn.tedu._04mybatis.pojo.entity.Weibo;
import cn.tedu._04mybatis.pojo.vo.*;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * weibo实体类的映射接口
 */
@Mapper //自动创建该映射接口的实现类
public interface WeiboMapper {
    /**
     * 1.插入一条微博
     */
//    @Insert("INSERT INTO blog.weibo(content,created,user_id) " +
//            "VALUES(#{content},#{created},#{userId})")
    int insertWeibo(Weibo weibo);

    /**
     * 2.根据微博的id删除指定的微博
     */
//    @Delete("DELETE FROM blog.weibo WHERE id=#{weiboId}")
    int deleteWeiboById(int weiboId);

    /**
     * 3.根据微博的id修改微博的信息
     */
//    @Update("UPDATE blog.weibo SET content=#{content},created=#{created},user_id=#{userId} " +
//            "WHERE id=#{id}")
    int updateWeiboById(Weibo weibo);

    /**
     * 4.查询微博
     *      根据id查询某条微博的全部信息[全列查询]
     */
//    @Select("SELECT id,content,created,user_id userId FROM blog.weibo " +
//            "WHERE id=#{weiboId}")
    Weibo selectWeiboById(int weiboId);

    /**
     * 5.查询微博
     *      查询多条/所有微博[多列查询]
     */
//    @Select("SELECT id,content,created,user_id userId FROM blog.weibo")
    List<Weibo> selectAllWeibo();

    /**
     * 6.查询微博: 指定字段查询
     *      根据微博id查询微博内容和发布时间
     */
//    @Select("SELECT content,created FROM blog.weibo WHERE id=#{weiboId}")
    WeiboVO1 selectColumns(int weiboId);

    /**
     * 7.练习: 根据用户id查询该用户发布的微博信息(微博id,内容,发布时间)[多条多列查询]
     *      接口方法: selectWeiboByUid()
     */
//    @Select("SELECT id,content,created FROM blog.weibo WHERE user_id=#{uid}")
    List<WeiboVO2> selectWeiboByUid(int uid);

    /**
     * 8.多表联查: 微博首页列表展示
     *   查询所有用户的微博, 展示微博id,微博内容,用户昵称
     */
    List<WeiboVO3> selectIndex();

    /**
     * 9.多表联查: 微博详情页展示
     *   根据微博id查询某条微博的id,内容,发布时间,用户昵称
     */
    WeiboDetailVO selectDetail(int id);

    /**
     * 10.多表联查:
     *    根据微博id查询指定微博的评论内容: 评论的id,内容,时间,用户昵称
     */
    List<CommentListVO> selectCommentList(int wid);

    /**
     * 11.ResultMap单表查询:
     *    根据微博的id查询微博编号,内容,用户id
     */
    ResultMapVO1 selectByWid(int wid);

    /**
     * 12.resultMap多表查询:
     *    查询指定用户发布的微博信息: 用户id,用户昵称,微博内容,发布时间
     */
    ResultMapVO2 selectWeiboListByUid(int uid);

    /**
     * 13.查询指定微博的评论信息: 微博id,微博内容,评论内容(集合List<Comment>)
     */
    ResultMapVO3 selectCommentsByWid(int wid);

    /**
     * 14.查询指定微博的评论信息: 微博id,微博内容,评论内容(评论id,评论用户昵称,内容,发布时间)
     */
    ResultMapVO4 selectCommentListByWid(int wid);
}
